예제로 공부하는 Go 언어

Go는 오픈소스 프로그래밍 언어로 빠르게 원하는 애플리케이션을 발할 수 있도록 디자인됐다. 예제로 살펴보는 Go는 go 언어의 기본 적인 사용방법을 예제 코드를 통해서 익히기 위해 만든 문서다. 문서의 원본은 문서를 참고하자. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1...

Hello World

우리는 "Hello world" 메시지를 출력하는 간단한 프로그램을 만들었다. 아래에 완전한 소스코드가 있다. 프로그램을 실행하면 "Hello world" 메시지를 출력하는 걸 볼 수 있을 것이다.반복하지 말라는 소프트웨어 공학의 중요한 실천 덕목 중 하나다. 모든 언어들이 고품질의 소프트웨어를 만들기 위해서 중복되는 코드를 하나로 관리해서 재사용 할 수 ...

예제로 살펴보는 Go : Closures

Go는 클로져(혹은 anonymous function이라고 부르는) 지원한다. 익명 함수(Anonymous function)는 코드 중간에 이름 없이 함수를 정의하기 위해서 사용한다. 이름이 없기 때문에 외부에서 사용 할 수 없다. 실용적인 관점에서는 데이터가 오직 하나의 메서드만 가지고 있을 때, 데이터가 정의된 함수 내에서 처리 하고자 할 때 사용한다....

예제로 살펴보는 Go : Variables

Go에서 변수는 명시적으로 선언되며, 컴파일시간에 정확히 선언했는지를 검사하게 된다. 선언하고 사용하지 않은 변수들에 대해서는 경고가 아닌 에러를 발생하며, 컴파일 실패한다.C/C++ 언어와 비교해서 선언 방법에 차이가 있다. C 언어의 경우 int a 와 같이 타입이 먼저 오는데 반해, go는 이름이 먼저오고 그 다음에 타입이 온다. 타입을 검사하는 자바...

예제로 살펴보는 Go : Timeout

타임아웃은 외부에서의 네트워크 연결과 데이터베이스 작업등의 수행 시간을 설정하기 위해서 사용한다. Go에서는 select를 이용해서 타임아웃을 구현할 수 있다.예제 코드를 보자.예제 코드의 첫번째 고루틴은 2초를 sleep 한 다음에 c1 채널로 메시지를 보낸다. main 함수는 select 에서 c1로 부터 메시지를 기다린다. 그리고 time.After ...

예제로 살펴보는 Go : Select

Go의 select를 이용하면 여러 개의 채널로 부터 메시지를 기다릴 수 있다.예제 코드는 두 개의 고루틴을 가지고 있다. main 함수는 이들 고루틴으로 부터 메시지를 기다리는데, 고루틴에 따라서 서로 다른 처리를 해야 한다. 22 번째 줄에서 select를 이용해서 복수의 채널로 부터의 메시지를 기다리며 블럭된다. 어떤 채널로 부터 메시지가 발생하면, ...

예제로 살펴보는 Go : Channel Directions

채널은 기본적으로 양방향으로 사용할 수 있다. 반면 개발자는 채널을 읽기 전용으로 혹은 쓰기 전용으로 설정 할 수 있다. ping 함수는 쓰기 전용의 채널을 매개변수로 넘겨 받았다. 채널 pings는 쓰기만 가능하기 때문에, 읽으려고 하면 컴파일시 invalid operation에러가 발생한다. pong 함수는 읽기 전용의 채널을 매개변수로 넘겨 받았다. ...

예제로 살펴보는 Go : Errors

Go는 두 개 이상의 값을 반환할 수 있다. 이 점을 이용해서 실행결과와 에러 값을 함께 반환하는 방식으로 에러를 처리 할 수 있다. 이 방식은 상당히 직관적이다. 단지 하나의 값만을 반환하는 다른 언어들은 에러를 측정하는게 명확하지 않을 수 있다. 예를 들어 int 값을 반환하는 C 함수가 있다고 가정해 보자. 이 함수는 실패 할 경우 0을 반환한다. 그...

예제로 살펴보는 Go : Channel Synchronization

여러 개의 고루틴을 관리하다 보면, 이들을 동기화 해야 하는 필요가 생긴다. 여기에서는 고루틴이 끝날 때까지 기다리는 방법을 살펴본다.worker는 매개변수로 채널을 받는다. 소모되는 작업시간은 sleep로 대신했다. 작업이 끝나면 채널에 작업이 끝냈음을 알리는 메시지를 전송한다. main함수는 worker 고루틴을 실행하고 채널로 부터 메시지를 기다린다....

예제로 살펴보는 Go : Channel Buffering

기본적으로 채널은 unbuffered하게 만들어진다. 이것은 채널(chan <-)에 단지 하나의 데이터만 보낼 수 있음을 의미한다. 만약 채널이 데이터를 버퍼링 하기 원한다면, 채널을 만들 때 채널의 크기를 설정하면 된다.예제에서 크기가 2인 messages 채널을 만들었다. 이 message 채널은 버퍼링이 되기 때문에, 두 개의 메시지를 보낼 수 있다....